package fun.sssdnsy.util;

import javafx.scene.Node;
import javafx.scene.control.Labeled;

import java.util.Locale;
import java.util.ResourceBundle;

/**
 * 国际化工具类 (I18n)
 * <p>
 * - 读取 `messages_xx.properties`
 * - 支持动态切换语言
 * - 自动匹配系统语言
 */
public class I18nUtil {

    private static final String BUNDLE_NAME = "fun/sssdnsy/i18n/messages"; // 资源文件路径

    public static ResourceBundle bundle = loadBundle(Locale.getDefault());

    /**
     * 加载对应语言的资源包
     */
    private static ResourceBundle loadBundle(Locale locale) {
        return ResourceBundle.getBundle(BUNDLE_NAME, locale);
    }

    /**
     * **更新语言**
     *
     * @param locale 语言环境（如 `new Locale("zh")` 或 `new Locale("en")`）
     */
    public static void setLanguage(Locale locale) {
        bundle = loadBundle(locale);
    }

    /**
     * **应用国际化文本**
     *
     * @param labeled JavaFX 组件（如 Label, Button）
     * @param key     资源键值（如 `"status.ready"`, `"settings.language"`）
     */
    public static void applyI18n(Labeled labeled, String key) {
        if (bundle != null && bundle.containsKey(key)) {
            labeled.setText(bundle.getString(key));
        } else {
            labeled.setText("???" + key + "???"); // 标记未找到的文本
        }
    }

    public static void applyI18n(Node node, String key) {
        if (bundle != null && bundle.containsKey(key)) {
            node.setAccessibleText(bundle.getString(key));
        } else {
            node.setAccessibleText("???" + key + "???"); // 标记未找到的文本
        }
    }

    /**
     * **获取国际化文本**
     *
     * @param key 资源键值
     * @return 本地化文本
     */
    public static String getString(String key) {
        return bundle.containsKey(key) ? bundle.getString(key) : "???" + key + "???";
    }

    /**
     * 获取多语言文本
     */
    public static String get(String key) {
        return bundle.containsKey(key) ? bundle.getString(key) : key;
    }

    /**
     * 切换语言（动态更新）
     */
    public static void changeLanguage(String lang) {
        ConfigUtil.set("language", lang);
        ConfigUtil.save();
        bundle = ResourceBundle.getBundle("messages", new Locale(lang));
    }
}
